home *** CD-ROM | disk | FTP | other *** search
- #ifndef H_RPMSX
- #define H_RPMSX
-
- /** \ingroup rpmdep rpmtrans
- * \file lib/rpmsx.h
- * Structure(s) used for file security context pattern handling
- */
-
- #include <regex.h>
-
- /**
- */
- /*@-exportlocal@*/
- /*@unchecked@*/
- extern int _rpmsx_debug;
- /*@=exportlocal@*/
-
- /**
- */
- /*@-exportlocal@*/
- /*@unchecked@*/
- extern int _rpmsx_nopromote;
- /*@=exportlocal@*/
-
- typedef /*@abstract@*/ /*@refcounted@*/ struct rpmsx_s * rpmsx;
- typedef struct rpmsxp_s * rpmsxp;
- typedef struct rpmsxs_s * rpmsxs;
-
- #if defined(_RPMSX_INTERNAL)
- /**
- * File security context regex pattern.
- */
- struct rpmsxp_s {
- /*@only@*/ /*@relnull@*/
- const char * pattern; /*!< File path regex pattern. */
- /*@only@*/ /*@relnull@*/
- const char * type; /*!< File type string. */
- /*@only@*/ /*@relnull@*/
- const char * context; /*!< Security context. */
- /*@only@*/ /*@relnull@*/
- regex_t * preg; /*!< Compiled regex. */
- mode_t fmode; /*!< File type. */
- int matches;
- int hasMetaChars;
- int fstem; /*!< Stem id. */
- };
-
- /**
- * File/pattern stem.
- */
- struct rpmsxs_s {
- /*@only@*/ /*@relnull@*/
- const char * stem;
- int len;
- };
-
- /**
- * File security context patterns container.
- */
- struct rpmsx_s {
- /*@only@*/ /*@relnull@*/
- rpmsxp sxp; /*!< File context patterns. */
- int Count; /*!< No. of file context patterns. */
- int i; /*!< Current pattern index. */
- /*@only@*/ /*@relnull@*/
- rpmsxs sxs; /*!< File stems. */
- int nsxs; /*!< No. of file stems. */
- int maxsxs; /*!< No. of allocated file stems. */
- int reverse; /*!< Reverse traversal? */
- /*@refs@*/
- int nrefs; /*!< Reference count. */
- };
- #endif /* defined(_RPMSX_INTERNAL) */
-
- #ifdef __cplusplus
- extern "C" {
- #endif
-
- /**
- * Unreference a security context patterns instance.
- * @param sx security context patterns
- * @param msg
- * @return NULL always
- */
- /*@unused@*/ /*@null@*/
- rpmsx rpmsxUnlink (/*@killref@*/ /*@only@*/ /*@null@*/ rpmsx sx,
- /*@null@*/ const char * msg)
- /*@modifies sx @*/;
-
- /** @todo Remove debugging entry from the ABI. */
- /*@-exportlocal@*/
- /*@null@*/
- rpmsx XrpmsxUnlink (/*@killref@*/ /*@only@*/ /*@null@*/ rpmsx sx,
- /*@null@*/ const char * msg, const char * fn, unsigned ln)
- /*@modifies sx @*/;
- /*@=exportlocal@*/
- #define rpmsxUnlink(_sx, _msg) XrpmsxUnlink(_sx, _msg, __FILE__, __LINE__)
-
- /**
- * Reference a security context patterns instance.
- * @param sx security context patterns
- * @param msg
- * @return new security context patterns reference
- */
- /*@-exportlocal@*/
- /*@unused@*/ /*@newref@*/ /*@null@*/
- rpmsx rpmsxLink (/*@null@*/ rpmsx sx, /*@null@*/ const char * msg)
- /*@modifies sx @*/;
-
- /** @todo Remove debugging entry from the ABI. */
- /*@newref@*/ /*@null@*/
- rpmsx XrpmsxLink (/*@null@*/ rpmsx sx, /*@null@*/ const char * msg,
- const char * fn, unsigned ln)
- /*@modifies sx @*/;
- /*@=exportlocal@*/
- #define rpmsxLink(_sx, _msg) XrpmsxLink(_sx, _msg, __FILE__, __LINE__)
-
- /**
- * Destroy a security context patterns.
- * @param sx security context patterns
- * @return NULL always
- */
- /*@-exportlocal@*/
- /*@null@*/
- rpmsx rpmsxFree(/*@killref@*/ /*@only@*/ /*@null@*/ rpmsx sx)
- /*@modifies sx@*/;
- /*@=exportlocal@*/
-
- /**
- * Parse selinux file security context patterns.
- * @param sx security context patterns
- * @param fn file name to parse
- * @return 0 on success
- */
- /*@-exportlocal@*/
- int rpmsxParse(rpmsx sx, /*@null@*/ const char *fn)
- /*@globals rpmGlobalMacroContext, h_errno, fileSystem @*/
- /*@modifies sx, rpmGlobalMacroContext, h_errno, fileSystem @*/;
- /*@=exportlocal@*/
-
- /**
- * Create and load security context patterns.
- * @param fn security context patterns file name
- * @return new security context patterns
- */
- /*@null@*/
- rpmsx rpmsxNew(const char * fn)
- /*@globals rpmGlobalMacroContext, h_errno, fileSystem @*/
- /*@modifies rpmGlobalMacroContext, h_errno, fileSystem @*/;
-
- /**
- * Return security context patterns count.
- * @param sx security context patterns
- * @return current count
- */
- int rpmsxCount(/*@null@*/ const rpmsx sx)
- /*@*/;
-
- /**
- * Return security context patterns index.
- * @param sx security context patterns
- * @return current index
- */
- int rpmsxIx(/*@null@*/ const rpmsx sx)
- /*@*/;
-
- /**
- * Set security context patterns index.
- * @param sx security context patterns
- * @param ix new index
- * @return current index
- */
- int rpmsxSetIx(/*@null@*/ rpmsx sx, int ix)
- /*@modifies sx @*/;
-
- /**
- * Return current pattern.
- * @param sx security context patterns
- * @return current pattern, NULL on invalid
- */
- /*@-exportlocal@*/
- /*@observer@*/ /*@null@*/
- extern const char * rpmsxPattern(/*@null@*/ const rpmsx sx)
- /*@*/;
- /*@=exportlocal@*/
-
- /**
- * Return current type.
- * @param sx security context patterns
- * @return current type, NULL on invalid/missing
- */
- /*@-exportlocal@*/
- /*@observer@*/ /*@null@*/
- extern const char * rpmsxType(/*@null@*/ const rpmsx sx)
- /*@*/;
- /*@=exportlocal@*/
-
- /**
- * Return current context.
- * @param sx security context patterns
- * @return current context, NULL on invalid
- */
- /*@-exportlocal@*/
- /*@observer@*/ /*@null@*/
- extern const char * rpmsxContext(/*@null@*/ const rpmsx sx)
- /*@*/;
- /*@=exportlocal@*/
-
- /**
- * Return current regex.
- * @param sx security context patterns
- * @return current context, NULL on invalid
- */
- /*@-exportlocal@*/
- /*@observer@*/ /*@null@*/
- extern regex_t * rpmsxRE(/*@null@*/ const rpmsx sx)
- /*@*/;
- /*@=exportlocal@*/
-
- /**
- * Return current file mode.
- * @param sx security context patterns
- * @return current file mode, 0 on invalid
- */
- /*@-exportlocal@*/
- extern mode_t rpmsxFMode(/*@null@*/ const rpmsx sx)
- /*@*/;
- /*@=exportlocal@*/
-
- /**
- * Return current file stem.
- * @param sx security context patterns
- * @return current file stem, -1 on invalid
- */
- /*@-exportlocal@*/
- extern int rpmsxFStem(/*@null@*/ const rpmsx sx)
- /*@*/;
- /*@=exportlocal@*/
-
- /**
- * Return next security context patterns iterator index.
- * @param sx security context patterns
- * @return security context patterns iterator index, -1 on termination
- */
- /*@-exportlocal@*/
- int rpmsxNext(/*@null@*/ rpmsx sx)
- /*@modifies sx @*/;
- /*@=exportlocal@*/
-
- /**
- * Initialize security context patterns iterator.
- * @param sx security context patterns
- * @param reverse iterate in reverse order?
- * @return security context patterns
- */
- /*@-exportlocal@*/
- /*@null@*/
- rpmsx rpmsxInit(/*@null@*/ rpmsx sx, int reverse)
- /*@modifies sx @*/;
- /*@=exportlocal@*/
-
- /**
- * Find file security context from path and type.
- * @param sx security context patterns
- * @param fn file path
- * @param fmode file mode
- * @return file security context
- */
- /*@owned@*/ /*@null@*/
- const char * rpmsxFContext(/*@null@*/ rpmsx sx, const char * fn, mode_t fmode)
- /*@modifies sx @*/;
-
- #ifdef __cplusplus
- }
- #endif
-
- #endif /* H_RPMSX */
-